﻿#region copyright
//                Copyright Andrew Rafas 2012.
// Distributed under the Eclipse Public License, Version 1.0.
//           (See accompanying file LICENSE.txt or 
//     copy at http://www.eclipse.org/legal/epl-v10.html)
#endregion
using System;
using System.Diagnostics.Contracts;
using System.Collections.Generic;

namespace CSFP
{
    [ContractClassFor(typeof(ISeq<,>))]
    abstract class ISeqContract<T, S> : ISeq<T, S>
        where S : struct, ISeq<T, S>
    {
        [Pure]
        public bool IsValid { get { throw new NotImplementedException(); } }

        public T First
        {
            get
            {
                Contract.Requires(IsValid, "ISeq.First has a defined behaviour only when ISeq.IsValid");
                throw new NotImplementedException();
            }
        }

        public S Next
        {
            get
            {
                Contract.Requires(IsValid, "ISeq.Next has a defined behaviour only when ISeq.IsValid");
                throw new NotImplementedException();
            }
        }
    }
}
